package com.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

@Component // 声明组件
public class JdbcConfig {
    private String driverClassName = "com.mysql.cj.jdbc.Driver"; // 数据库驱动
    private String url = "jdbc:mysql://localhost:3306/music_new?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true"; // 数据库路径
    private String userName = "root"; // 账号
    private String passWord = "123456"; // 密码
    private int initialSize = 5; // 初始连接数
    private int minIdle = 5; // 最小连接池数量
    private int maxActive = 20; // 最大连接池数量
    private int maxWait = 500; // 配置获取连接等待超时的时间
    private int timeBetweenEvictionRunsMillis = 60000; // 配置间隔多久才进行一次检测，检测需要关闭的空闲连接，单位是毫秒
    private int minEvictableIdleTimeMillis = 60000; // 配置一个连接在池中最小生存的时间，单位是毫秒
    private int maxEvictableIdleTimeMillis = 900000; // 配置一个连接在池中最大生存的时间，单位是毫秒


    @Bean // 创建一个Bean
    public DruidDataSource druidDataSource() {
        DruidDataSource druidDataSource = new DruidDataSource();

        /** 配置数据库信息 */
        druidDataSource.setDriverClassName(driverClassName);
        druidDataSource.setUrl(url);
        druidDataSource.setUsername(userName);
        druidDataSource.setPassword(passWord);

        /** 配置初始化大小、最小、最大 */
        druidDataSource.setInitialSize(initialSize);
        druidDataSource.setMaxActive(maxActive);
        druidDataSource.setMinIdle(minIdle);

        /** 配置获取连接等待超时的时间 */
        druidDataSource.setMaxWait(maxWait);

        /** 配置间隔多久才进行一次检测，检测需要关闭的空闲连接，单位是毫秒 */
        druidDataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);

        /** 配置一个连接在池中最小、最大生存的时间，单位是毫秒 */
        druidDataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
        druidDataSource.setMaxEvictableIdleTimeMillis(maxEvictableIdleTimeMillis);
        return druidDataSource;
    }
}
